/**
 * 基础类型定义
 * 包含所有服务层的通用类型
 */

/**
 * 标准响应格式
 */
export interface StandardResponse<T = any> {
  code: number        // 状态码：200=成功，400=客户端错误，500=服务器错误
  data?: T           // 响应数据
  message: string    // 响应消息
  timestamp: number  // 时间戳
}

/**
 * 状态码常量
 */
export const ResponseCode = {
  SUCCESS: 200,           // 成功
  CREATED: 201,           // 创建成功
  BAD_REQUEST: 400,       // 请求错误
  NOT_FOUND: 404,         // 资源不存在
  CONFLICT: 409,          // 冲突（如重复创建）
  INTERNAL_ERROR: 500,    // 内部错误
  DATABASE_ERROR: 501,    // 数据库错误
  VALIDATION_ERROR: 502,  // 验证错误
  FILE_ERROR: 503         // 文件操作错误
} as const

/**
 * 响应状态码类型
 */
export type ResponseCodeType = typeof ResponseCode[keyof typeof ResponseCode]

/**
 * IPC错误类
 */
export class IPCError extends Error {
  constructor(
    message: string,
    public code: number,
    public data?: any
  ) {
    super(message)
    this.name = 'IPCError'
  }
}

/**
 * 服务结果类型
 */
export interface ServiceResult<T = any> {
  success: boolean
  data?: T
  message?: string
  error?: {
    message: string
    code: number
    data?: any
  }
}

/**
 * 分页参数
 */
export interface PaginationParams {
  page?: number
  pageSize?: number
  sortBy?: string
  sortOrder?: 'asc' | 'desc'
}

/**
 * 分页结果
 */
export interface PaginatedResult<T> {
  items: T[]
  total: number
  page: number
  pageSize: number
  totalPages: number
}

/**
 * 文件信息基础类型
 */
export interface BaseFileInfo {
  name: string
  path: string
  size?: number
  createdAt?: string | Date
  modifiedAt?: string | Date
}

/**
 * 操作日志类型
 */
export interface OperationLog {
  id: string
  operation: string
  module: string
  params?: any
  result?: any
  error?: string
  timestamp: string
  duration?: number
}

/**
 * 验证规则类型
 */
export interface ValidationRule {
  required?: boolean
  minLength?: number
  maxLength?: number
  pattern?: RegExp
  custom?: (value: any) => boolean | string
}

/**
 * 验证结果类型
 */
export interface ValidationResult {
  valid: boolean
  errors: Array<{
    field: string
    message: string
  }>
}

/**
 * 通用配置类型
 */
export interface BaseConfig {
  [key: string]: any
}

/**
 * 事件监听器类型
 */
export type EventListener<T = any> = (data: T) => void

/**
 * 事件取消订阅函数类型
 */
export type UnsubscribeFunction = () => void

/**
 * 异步操作状态
 */
export interface AsyncOperationState {
  loading: boolean
  error?: string
  lastUpdated?: string
}

/**
 * 缓存配置
 */
export interface CacheConfig {
  ttl?: number        // 生存时间（毫秒）
  maxSize?: number    // 最大缓存条目数
  enabled?: boolean   // 是否启用缓存
}

/**
 * 重试配置
 */
export interface RetryConfig {
  maxAttempts?: number
  delay?: number
  backoff?: 'linear' | 'exponential'
}

/**
 * 通用过滤器
 */
export interface BaseFilter {
  [key: string]: any
}

/**
 * 排序配置
 */
export interface SortConfig {
  field: string
  order: 'asc' | 'desc'
}

/**
 * 搜索配置
 */
export interface SearchConfig {
  query: string
  fields?: string[]
  caseSensitive?: boolean
}

/**
 * 导出配置基础类型
 */
export interface BaseExportConfig {
  format: string
  quality?: number
  compression?: number
}

/**
 * 导入配置基础类型
 */
export interface BaseImportConfig {
  overwrite?: boolean
  validate?: boolean
  backup?: boolean
}

/**
 * 权限类型
 */
export interface Permission {
  action: string
  resource: string
  granted: boolean
}

/**
 * 用户会话信息
 */
export interface SessionInfo {
  id: string
  userId?: string
  startTime: string
  lastActivity: string
  isActive: boolean
}

/**
 * 系统状态
 */
export interface SystemStatus {
  online: boolean
  version: string
  uptime: number
  performance: {
    memory: number
    cpu: number
  }
}

/**
 * 通知类型
 */
export interface Notification {
  id: string
  type: 'info' | 'success' | 'warning' | 'error'
  title: string
  message: string
  timestamp: string
  read?: boolean
  actions?: Array<{
    label: string
    action: string
  }>
}

/**
 * 主题配置
 */
export interface ThemeConfig {
  mode: 'light' | 'dark' | 'auto'
  primaryColor?: string
  accentColor?: string
  customColors?: Record<string, string>
}

/**
 * 语言配置
 */
export interface LocaleConfig {
  language: string
  region?: string
  dateFormat?: string
  timeFormat?: string
  numberFormat?: string
}

/**
 * 应用设置
 */
export interface AppSettings {
  theme: ThemeConfig
  locale: LocaleConfig
  autoSave?: boolean
  notifications?: boolean
  analytics?: boolean
  [key: string]: any
}
